/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controlador;

import com.logica.Administrativa;
import com.logica.Comercial;
import com.modelo.Ciudad;
import com.modelo.Inmueble;
import com.modelo.Mensaje;
import com.modelo.Usuario;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedHashMap;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author RUBÉN
 */
@Controller
@SessionAttributes
public class UsuarioControl {

    @Autowired
    private Comercial comercial;
    @Autowired
    private Administrativa administrativa;

    @RequestMapping(value = "/registroUsuario.htm")
    public ModelAndView FormularioRegistrarUsuario() {
        ModelAndView mv = new ModelAndView("registroUsuario");
        mv.addObject("command", new Usuario());

        LinkedHashMap<BigDecimal, String> ciudades = administrativa.listarCiudades();
        mv.addObject("ciudades", ciudades);

        return mv;
    }

    @RequestMapping(value = "/registroUsuario.htm", method = RequestMethod.POST)
    public String registrarUsuario(@ModelAttribute("registroUsuario") Usuario usuario,@RequestParam("city") BigDecimal ciudad, @RequestParam("sex") char sexo, @RequestParam("pri") char privacidad,BindingResult result, HttpSession sesion) {
        if (usuario.getApellido().equals("") || usuario.getNombre().equals("") || usuario.getFechaNacimiento().toString().equals("")||usuario.getFechaNacimiento()==null || usuario.getDescripcion().equals("") || usuario.getCorreoElectronico().equals("") || usuario.getNumeroDocumento().equals("") || usuario.getDireccion().equals("") || usuario.getCelular().equals("")||usuario.getFoto().equals("")||usuario.getContrasena().equals("")) { 
            sesion.setAttribute("error", "Campos invalidos");
            return "error";
        } else {            
              GregorianCalendar cal = new GregorianCalendar();
              usuario.setFechaRegistro(cal.getTime());
              usuario.setRol("Cliente");
              Ciudad temporal = new Ciudad();
              temporal.setIdCiudad(ciudad);
              usuario.setCiudad(temporal);
              usuario.setSexo(sexo);
              usuario.setPrivacidad(privacidad);
           //System.out.println("Nombre "+ usuario.getNombre()+" Apellido: "+ usuario.getApellido()+" sexo: "+usuario.getSexo()+" Ciudad: "+ usuario.getCiudad().getNombre());

            if (comercial.buscarUsuarioPorCorreo(usuario) != null) {
                sesion.setAttribute("error", "El correo ya existe");
                return "error";
            }

 
            boolean resultado = comercial.registrarUsuario(usuario);
            if (resultado) {
                sesion.setAttribute("usuario", usuario);                
                return "redirect:/home.jsp";
            } else {
                sesion.setAttribute("error", "El Usuario ya existe");
                return "error";
            }
        }
    }

    @RequestMapping(value = "/listadoUsuarios.htm")
    public ModelAndView listarUsuarios() {
        ModelAndView mv = new ModelAndView("listadoUsuarios");
        List result = comercial.listarUsuarios();
        mv.addObject("listadoUsuarios", result);
        return mv;
    }
    
    
    @RequestMapping(value = "/historialInmueble.htm")
    public ModelAndView listarInmueblesPorUsuario(HttpSession sesion) {
        ModelAndView mv = new ModelAndView("historialInmueble");
        Usuario usuario = (Usuario)sesion.getAttribute("usuario");
        List result = comercial.historialInmueble(usuario);
        mv.addObject("historialInmueble", result);
        return mv;
    }

    @RequestMapping("/perfilUsuario.htm")
    public ModelAndView mostrarUsuario(@RequestParam("code") String idUsuario) {
        ModelAndView mv = new ModelAndView("perfilUsuario");

        Usuario usu = new Usuario();
        int idUsu = Integer.parseInt(idUsuario);
        usu.setIdUsuario(idUsu);
        Usuario temp = comercial.buscarUsuario(usu);
        mv.addObject("command", temp);
        return mv;
    }

    @RequestMapping(value = "/loginUsuario.htm")
    public ModelAndView FormularioIngresoUsuario() {
        return new ModelAndView("loginUsuario", "command", new Usuario());
    }

    @RequestMapping(value = "/loginUsuario.htm", method = RequestMethod.POST)
    public String ingresarUsuario(@ModelAttribute("loginUsuario") Usuario usuario, BindingResult result, HttpSession sesion) {
        if (usuario.getContrasena().equals("") || usuario.getCorreoElectronico().equals("")) {
            sesion.setAttribute("error", "Campos invalidos");
            return "error";
        } else {
            Usuario usu = new Usuario();
            usu.setCorreoElectronico(""+usuario.getCorreoElectronico());
            usu.setContrasena(""+usuario.getContrasena());
            System.out.println(usuario.getCorreoElectronico());
            if (comercial.buscarUsuarioPorCorreo(usu) == null) {
                
                sesion.setAttribute("error", "Usuario no existe");
                return "redirect:/registroUsuario.htm";
            }
            Usuario temp = comercial.iniciarSesion(usu);
            System.out.println("usuario: " + temp.getCorreoElectronico()+" contraseña "+temp.getContrasena());
            if (temp == null) {
                sesion.setAttribute("error", "Verifique su usuario o contraseña");
                return "redirect:/loginUsuario.htm";
            } else {
                sesion.setAttribute("usuario", temp);
                return "redirect:/home.jsp";
            }
        }
    }
    
    
    @RequestMapping(value = "/terminarSesion.htm")
    public String terminarSesion(HttpSession sesion) {
      sesion.invalidate();
        return "redirect:/home.jsp";
    }

    public Comercial getComercial() {
        return comercial;
    }

    public void setComercial(Comercial comercial) {
        this.comercial = comercial;    }
}
